"""
ProofMapper节点的工具函数
"""
import uuid
from typing import Dict
from .utils import parse_llm_json_response

def create_materials_prompt(checkpoint: dict) -> str:
    """
    创建生成证明材料清单的提示词
    
    Args:
        checkpoint: 评估项信息
        
    Returns:
        str: 格式化的提示词
    """
    return f"""
请为以下安全评估细项生成一份证明材料清单：

模块: {checkpoint["module"]}
分类: {checkpoint["category"]}
评估细项: {checkpoint["checkpoint"]}

请生成一个包含以下信息的JSON对象：
1. module: 模块名称（保持不变）
2. category: 分类（保持不变）
3. checkpoint: 评估细项描述（保持不变）
4. materials: 证明材料清单，列出3-5项业务负责人日常可能接触到的相关材料类型，描述要通俗易懂，不要过于专业或精确
5. notes: 补充说明或建议

注意事项：
- 材料描述要贴近日常工作场景，使用业务人员容易理解的语言
- 不要要求特定格式的文档或报告，而是描述材料的内容类型
- 给出指导性的描述，让业务负责人能联想到自己手头的相关资料
- 避免使用过于技术化或正式的术语

请以下面的格式输出：
```json
{{
  "module": "模块名称",
  "category": "分类",
  "checkpoint": "评估细项描述",
  "materials": [
    "相关的工作记录或操作说明",
    "日常使用的流程文档或制度",
    "相关的会议记录或沟通材料",
    "..."
  ],
  "notes": "补充说明"
}}
```
"""

def parse_materials_response(response: str, checkpoint: Dict) -> Dict:
    """
    解析LLM返回的证明材料清单
    
    Args:
        response: LLM的响应文本
        checkpoint: 原始评估项信息（用于错误时的回退）
        
    Returns:
        Dict: 解析后的证明材料清单
    """
    # 创建默认结果（解析失败时使用）
    default_result = {
        "module": checkpoint["module"],
        "category": checkpoint["category"],
        "checkpoint": checkpoint["checkpoint"],
        "materials": ["需要手动添加证明材料"],
        "notes": "JSON解析失败，请手动添加材料"
    }
    
    # 解析JSON响应
    result = parse_llm_json_response(
        response=response,
        expected_type=dict,
        default_value=default_result
    )
    
    # 生成唯一ID
    if "id" not in result or not result["id"]:
        result["id"] = str(uuid.uuid4())
    
    return result
